package co.com.smart.eagle.client.view.impl.components;

import java.io.Serializable;

import co.com.smart.eagle.infrastructure.dto.SmartTipoMensajes;

import com.google.gwt.user.client.Timer;
import com.sencha.gxt.widget.core.client.box.AlertMessageBox;
import com.sencha.gxt.widget.core.client.event.BeforeHideEvent;
import com.sencha.gxt.widget.core.client.event.BeforeHideEvent.BeforeHideHandler;

/**
 * 
 * @author Andres Felipe Escobar Lopez
 *
 */
public class SmartAlertDialog extends AlertMessageBox {

	public interface CallBackModal {
		void finModal();
	}

	private MensajeDTO currentMessage;

	class MensajeDTO implements Serializable {

		/**
		 * 
		 */
		private static final long serialVersionUID = 1L;

		private String mensaje;
		private SmartTipoMensajes tipoMensaje;
		private CallBackModal callBack;

		public MensajeDTO(String mensaje, SmartTipoMensajes tipoMensaje,
				CallBackModal callBack) {
			super();
			this.mensaje = mensaje;
			this.tipoMensaje = tipoMensaje;
			this.callBack = callBack;
		}

		public String getMensaje() {
			return mensaje;
		}

		public SmartTipoMensajes getTipoMensaje() {
			return tipoMensaje;
		}

		public CallBackModal getCallBack() {
			return callBack;
		}

		public void setTipoMensaje(SmartTipoMensajes tipoMensaje) {
			this.tipoMensaje = tipoMensaje;
		}
	}

	public SmartAlertDialog(String title, String message,
			SmartTipoMensajes type, CallBackModal callBack) {
		super(title, message);
		currentMessage = new MensajeDTO(message, type, callBack);
	}

	public SmartAlertDialog(String title, String message, SmartTipoMensajes type) {
		this(title, message, type, null);
	}

	public SmartAlertDialog(String title, String message) {
		this(title, message, null);
	}

	private void cerrar() {
		if (currentMessage.getCallBack() != null) {
			Timer timer = new Timer() {

				@Override
				public void run() {
					currentMessage.getCallBack().finModal();
				}
			};
			timer.schedule(200);
		}

	}

	public void showAlert() {
		pollMessage();
	}

	private void pollMessage() {
		
		if (currentMessage.getTipoMensaje() != null) {
			switch (currentMessage.getTipoMensaje()) {
			case ADVERTENCIA:
				this.setIcon(ICONS.warning());
				break;
			case ERROR:
				this.setIcon(ICONS.error());
				break;
			case INFORMACION:
				this.setIcon(ICONS.info());
				break;
			default:
				break;
			}
		}
		
		this.addBeforeHideHandler(new BeforeHideHandler() {

			@Override
			public void onBeforeHide(BeforeHideEvent event) {
				cerrar();
			}
		});
		show();
	}

}
